home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / optivc32 / vqistd.h < prev    next >
C/C++ Source or Header  |  1999-03-06  |  7KB  |  171 lines

  1. /*  VQIstd.h
  2.  
  3.   vector management functions for data type "quad".
  4.  
  5.   Copyright (c) 1996-1999 by Martin Sander
  6.   All Rights Reserved.
  7. */
  8.  
  9. #ifndef __VQISTD_H
  10. #define __VQISTD_H
  11.  
  12. #if !defined( __VECLIB_H )
  13.    #include <VecLib.h>
  14. #endif
  15.  
  16. #ifdef __cplusplus
  17.    extern "C" {
  18. #endif
  19.  
  20. /************  Making the data type quad available   *********************
  21.  *        The following definitions are necessary only if                *
  22.  *        the compiler does not support 64 bit integers.                 */
  23.  
  24. quad        __vf  setquad( long double x );
  25. double      __vf  quadtod( quad x );
  26. long double __vf  _quadtold( quad x );
  27.  
  28. /************************  Generation ******************************/
  29.  
  30. qiVector  __vf  VQI_vector( ui size );
  31. qiVector  __vf  VQI_vector0( ui size );
  32.  
  33. /***************  Addressing single vector elements ******************/
  34.  
  35. quad _VFAR * VQI_Pelement( qiVector X, ui n );
  36.       /* returns a pointer to the n'th element of X. For the memory model
  37.          HUGE, the pointer is normalized. */
  38. #define VQI_element( X, n ) (*VQI_Pelement( X, n ))
  39.  
  40. /****************** Initialization  ******************************/
  41.  
  42. void  __vf  VQI_equ0( qiVector X, ui size );
  43. void  __vf  VQI_equC( qiVector X, ui size, quad C );
  44. void  __vf  VQI_equV( qiVector Y, qiVector X, ui size );
  45. void  __vf  VQI_ramp( qiVector X, ui size, quad Start, quad Rise );
  46. long  __vf  VQI_random( qiVector X, ui size, long seed,
  47.                         quad MinVal, quad MaxVal );  /*  returns new seed */
  48.  
  49.  
  50. /************** Data-type interconversions  ***************************/
  51.         /* no conversion signed-unsigned for quad available, because
  52.            no data-type "unsigned quad" exists */
  53.  
  54. void  __vf  V_BItoQI( qiVector Y, biVector X, ui size );  /* up-conversion */
  55. void  __vf  V_SItoQI( qiVector Y, siVector X, ui size );
  56. void  __vf  V_ItoQI(  qiVector Y, iVector  X, ui size );
  57. void  __vf  V_LItoQI( qiVector Y, liVector X, ui size );
  58.  
  59. void  __vf  V_QItoBI(  biVector Y, qiVector X, ui size ); /* down-conversion */
  60. void  __vf  Vo_QItoSI( siVector Y, qiVector X, ui size );
  61. void  __vf  Vo_QItoI(  iVector  Y, qiVector X, ui size );
  62. void  __vf  Vo_QItoLI( liVector Y, qiVector X, ui size );
  63. #ifdef V_trapIntError
  64.     #define V_QItoSI   Vo_QItoSI
  65.     #define V_QItoI    Vo_QItoI
  66.     #define V_QItoLI   Vo_QItoLI
  67. #else
  68.     void  __vf   V_QItoSI( siVector Y, qiVector X, ui size );
  69.     void  __vf   V_QItoI(  iVector  Y, qiVector X, ui size );
  70.     void  __vf   V_QItoLI( liVector Y, qiVector X, ui size );
  71. #endif
  72.  
  73. void  __vf   V_QItoF(  fVector Y, qiVector X, ui size );
  74. void  __vf   V_QItoD(  dVector Y, qiVector X, ui size );
  75. #ifdef __BORLANDC__
  76.     void  __vf   V_QItoE(  eVector Y, qiVector X, ui size );
  77. #else  /* no 80-bit IEEE reals with Visual C++ */
  78.     #define V_QItoE V_QItoD
  79. #endif
  80.  
  81.  
  82.  
  83. /************** Index-oriented manipqiations ***************************/
  84.  
  85. void  __vf  VQI_rev( qiVector Y, qiVector X, ui size );
  86. #ifdef V_HUGE
  87.     void  __vf  VQI_rotate( qiVector Y, qiVector X, ui size, long pos );
  88. #else
  89.     void  __vf  VQI_rotate( qiVector Y, qiVector X, ui size, int pos );
  90. #endif
  91.  
  92. void  __vf  VQI_delete( qiVector X, ui size, ui pos );
  93. void  __vf  VQI_insert( qiVector X, ui size, ui pos, quad C );
  94.  
  95. void  __vf  VQI_sort( qiVector Y, qiVector X, ui size, int dir );
  96. void  __vf  VQI_sortind( uiVector Ind, qiVector X, ui size, int dir );
  97.  
  98. void  __vf  VQI_subvector( qiVector Y, ui sizey, qiVector X, int samp );
  99. void  __vf  VQI_subvector_equC( qiVector Y, ui subsz, unsigned samp, quad C );
  100. void  __vf  VQI_subvector_equV( qiVector Y, ui subsz, unsigned samp,
  101.                                 qiVector X );
  102.  
  103. void  __vf  VQI_indpick( qiVector Y, uiVector Ind, ui sizey, qiVector X );
  104. void  __vf  VQI_indput(  qiVector Y, qiVector X, uiVector Ind, ui sizex );
  105.  
  106. ui    __vf  VQI_searchC( qiVector XTab, ui size, quad C, int mode );
  107. void  __vf  VQI_searchV( uiVector Ind, qiVector X, ui sizex,
  108.                          qiVector Tab, ui sizetab, int mode );
  109.  
  110. /********************   One-dimensional Vector Operations  ********/
  111.  
  112. quad   __vf  VQI_sum( qiVector X, ui size );
  113. quad   __vf  VQI_max( qiVector X, ui size );
  114. quad   __vf  VQI_min( qiVector X, ui size );
  115. quad   __vf  VQI_maxind( ui _VFAR *Ind, qiVector X, ui size );
  116. quad   __vf  VQI_minind( ui _VFAR *Ind, qiVector X, ui size );
  117. void   __vf  VQI_runsum( qiVector Y, qiVector X, ui size );
  118. void   __vf  VQI_runmax( qiVector Y, qiVector X, ui size );
  119. void   __vf  VQI_runmin( qiVector Y, qiVector X, ui size );
  120. extended __vf  VQI_fsum( qiVector X, ui size );
  121. extended __vf  VQI_mean( qiVector X, ui size );
  122.  
  123. int    __vf  VQI_iselementC( qiVector Tab, ui size, quad C );
  124. ui     __vf  VQI_iselementV( qiVector Y, qiVector X, ui sizex,
  125.                              qiVector Tab, ui sizetab );
  126.  
  127.  
  128. /************************ Input / Output ******************************/
  129.  
  130. void  __vf   VQI_fprint(  FILE _VFAR *stream, qiVector X, ui size,
  131.                   unsigned nperline, unsigned linewidth );
  132.  
  133. #if !defined _Windows || defined __FLAT__ || defined _WIN32
  134.     void __vf  VQI_cprint( qiVector X, ui size, unsigned nperline );
  135. #endif
  136. #define VQI_print( x, sz, npl ) VQI_fprint( stdout, x, sz, npl, 80 )
  137.  
  138. /* note that V_setRadix does not act on VQI_read. Here, the radix is always 10 */
  139. void  __vf   VQI_read( qiVector X, ui size, FILE _VFAR *stream );
  140. void  __vf   VQI_write( FILE _VFAR *stream, qiVector X, ui size );
  141. void  __vf   VQI_nread( unsigned n, ui size, FILE _VFAR *stream, ... );
  142. void  __vf   VQI_nwrite( FILE _VFAR *stream, unsigned n, ui size, ... );
  143. void  __vf   VQI_setWriteFormat( char _VFAR *FormatString );
  144.                                             /* for VQI_write and VQI_nwrite */
  145. void  __vf   VQI_setWriteSeparate( char _VFAR *SepString ); /* for VQI_write */
  146. void  __vf   VQI_setNWriteSeparate( char _VFAR *SepString ); /* for VQI_nwrite */
  147. #ifdef V_HUGE
  148.     void  __vf   VQI_store(  FILE _VFAR *stream, qiVector X, ui size );
  149.     void  __vf   VQI_recall( qiVector X, ui size, FILE _VFAR *stream );
  150. #else
  151.     #ifdef __cplusplus
  152.          void  inline VQI_store( FILE _VFAR *stream, qiVector X, ui size )
  153.          {    fwrite( X, sizeof(quad), size, stream ); 
  154.          }
  155.          void  inline VQI_recall( qiVector X, ui size, FILE _VFAR *stream )
  156.          {    fread(  X, sizeof(quad), size, stream );
  157.          }
  158.     #else
  159.         #define VQI_store( str, X, sz )  \
  160.                      fwrite( X, sizeof(quad), sz, str )
  161.         #define VQI_recall( X, sz, str ) \
  162.                      fread(  X, sizeof(quad), sz, str )
  163.     #endif
  164. #endif      /* VQI_store, VQI_recall in binary format */
  165.  
  166. #ifdef __cplusplus
  167. }
  168. #endif
  169.  
  170. #endif   /*  __VQISTD_H    */
  171.